/*
 * @Author: your name
 * @Date: 2021-02-20 14:48:55
 * @LastEditTime: 2021-02-20 15:55:27
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: \hm63-hmtt-wsh\src\api\request.js
 */
import axios from 'axios'
import { getLocal } from '../utils/local'

const _axios = axios.create({
  baseURL: process.env.VUE_APP_URL
})

// 添加请求拦截器

let cancelArr = [] // 接口请求数组 c:cancel url:config.url  url相同则为重复调用

// 过滤相同的接口
window.cancelApi = function (url, cancelAll = false) {
  const _temp = cancelArr.filter(item => {
    if (cancelAll) {
      item.c()
    } else if (url === item.url) {
      item.c()
      return false
    } else {
      return true
    }
  })
  cancelArr = _temp
}

_axios.interceptors.request.use(
  function (config) {
    // 在发送请求之前做些什么
    // token请求头
    if (config.token) {
      const _token = getLocal('token')
      config.headers.Authorization = `Bearer ${_token}`
    }
    // 把重复调用的接口取消
    window.cancelApi(config.url)
    config.cancelToken = new axios.CancelToken(cancel => {
      cancelArr.push({ c: cancel, url: config.url })
    })
    return config
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error)
  }
)

// 添加响应拦截器
_axios.interceptors.response.use(
  function (response) {
    // 对响应数据做点什么
    return response.data
  },
  function (error) {
    // 对响应错误做点什么
    return Promise.reject(error)
  }
)

export default _axios
